<?php

class DatosAntropomorficosController extends AweController {

    /**
     * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
     * using two-column layout. See 'protected/views/layouts/column2.php'.
     */
    public $layout = '//layouts/column2';
    public $defaultAction = 'admin';

    public function filters() {
        return array(
            array('CrugeAccessControlFilter'),
        );
    }

    /**
     * Displays a particular model.
     * @param integer $id the ID of the model to be displayed
     */
    public function actionView($id) {
        if (Yii::app()->user->checkAccess("supervisor")) {
            $this->render('view', array(
                'model' => $this->loadModel($id),
            ));
        } else if (Yii::app()->user->checkAccess("institucion")) {
            $data = DatosAntropomorficos::model()->de_institucion($id)->findAll();
            if (!empty($data)) {
                $this->render('view', array(
                    'model' => $this->loadModel($id),
                ));
            } else {
                $this->redirect(array('../ninio/institucion/contenidos'));
            }
        }
    }

    /**
     * Acción que permite registrar un solo niño con sus datos antropomórficos
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param int $id identificador del niño
     */
    public function actionCreateUnique($id) {
        $model = new DatosAntropomorficos;
        if (isset($_POST['DatosAntropomorficos'])) {
            $model->attributes = $_POST['DatosAntropomorficos'];
            $model->fecha = Util::FechaActual();
            $aux = Ninios::model()->findByPk((int) $id);
            $model->interpretacion_peso = rangosCurvasOms::getRangoInterpretadoPeso($aux->genero, $model->edad, (float) $model->peso);
            $model->interpretacion_talla = rangosCurvasOms::getRangoInterpretadoTalla($aux->genero, $model->edad, (float) $model->talla);
            if ($model->save()) {
                $this->redirect(array('ajaxObtenerReporteIMC', 'idNinio' => $model->ninios->id));
            }
        }
        $model->fecha = Util::FechaActual();
        $model->ninios_id = $id;
        $this->render('create', array(
            'model' => $model,
        ));
    }

    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id the ID of the model to be updated
     */
    public function actionUpdate($id) {
        $model = $this->loadModel($id);
        if (isset($_POST['DatosAntropomorficos'])) {
            $model->attributes = $_POST['DatosAntropomorficos'];

            $model->setScenario("update");
            $model->attributes = $_POST['DatosAntropomorficos'];

            if ($model->ninios_id !== $model['oldValues']['ninios_id'] || $model->fecha !== $model['oldValues']['fecha'] || $model->edad !== $model['oldValues']['edad'] || $model->talla !== $model['oldValues']['talla'] || $model->peso !== $model['oldValues']['peso'] || $model->imc !== $model['oldValues']['imc']
            ) {
                $model->validatorList->add(CValidator::createValidator('required', $model, 'observacion_Auditoria, archivo_Auditoria'));
            }
            $aux = Ninios::model()->findByPk((int) $id);
            $model->interpretacion_peso = rangosCurvasOms::getRangoInterpretadoPeso($aux->genero, $model->edad, (float) $model->peso);
            $model->interpretacion_talla = rangosCurvasOms::getRangoInterpretadoTalla($aux->genero, $model->edad, (float) $model->talla);
            if ($model->save()) {
                $this->redirect(array('admin'));
            }
        }
        if (Yii::app()->user->checkAccess("admin")) {

            $this->render('update', array(
                'model' => $model,
            ));
        } else if (Yii::app()->user->checkAccess("institucion")) {
            $data = DatosAntropomorficos::model()->de_institucion($id)->findAll();
            if (!empty($data)) {
                $this->render('update', array(
                    'model' => $model,
                ));
            } else {
                $this->redirect(array('../ninio/institucion/contenidos'));
            }
        }
    }

    /**
     * Deletes a particular model.
     * If deletion is successful, the browser will be redirected to the 'admin' page.
     * @param integer $id the ID of the model to be deleted
     */
    public function actionDelete($id) {
        if (Yii::app()->request->isPostRequest) {
            // we only allow deletion via POST request
            $this->loadModel($id)->delete();

            // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
            if (!isset($_GET['ajax']))
                $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
        } else
            throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
    }

    /**
     * Manages all models.
     */
    public function actionAdmin() {
        $model = new DatosAntropomorficos('search');
        $model2 = new DatosAntropomorficos('search');
        $model->unsetAttributes(); // clear any default values
        $model2->unsetAttributes(); // clear any default values
        if (isset($_GET['DatosAntropomorficos'])) {
            $model->attributes = $_GET['DatosAntropomorficos'];
            $model2->attributes = $_GET['DatosAntropomorficos'];
        }
        $query = $model->contarDatos();
        if (Yii::app()->user->checkAccess("supervisor")) {
            if ($query > 0) {

                $this->render('admin', array(
                    'model' => $model, 'model2' => $model2
                ));
            } else {
                if (Yii::app()->user->checkAccess("admin")) {
                    $this->render('empty', array());
                }
                Yii::app()->user->setFlash('error', 'Todavía no se ha registrado datos antropom&eacute;tricos para los infantes');
                $this->redirect(array('../ninio/institucion/contenidos'));
            }
        } else if (Yii::app()->user->checkAccess("institucion")) {
            $data = DatosAntropomorficos::model()->de_institucion()->findAll();
            if (!empty($data)) {
                $this->render('admin', array(
                    'model' => $model, 'model2' => $model2
                ));
            } else {
                $this->render('empty', array());
            }
        }
    }

    /**
     * Returns the data model based on the primary key given in the GET variable.
     * If the data model is not found, an HTTP exception will be raised.
     * @param integer the ID of the model to be loaded
     */
    public function loadModel($id, $modelClass = __CLASS__) {
        $model = DatosAntropomorficos::model()->findByPk((int) $id);
        if ($model === null)
            throw new CHttpException(404, 'The requested page does not exist.');
        return $model;
    }

    /**
     * Performs the AJAX validation.
     * @param CModel the model to be validated
     */
    protected function performAjaxValidation($model, $form = null) {
        if (isset($_POST['ajax']) && $_POST['ajax'] === 'datos-antropomorficos-form') {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }

    /**
     * Llama al reporteador de IMC, peso y talla de un infante
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param int $idNinio identificador del infante
     */
    public function actionAjaxObtenerReporteIMC($idNinio) {
        $ninio = Ninios::model()->findByPk((int) $idNinio);
        $inicio = $ninio->fecha_nacimiento;
        $id = $ninio->id;
        $reporteIMC = DatosAntropomorficos::model()->generarReport($inicio, $id, "imc");
        $reporteTalla = DatosAntropomorficos::model()->generarReport($inicio, $id, "talla");
        $reportePeso = DatosAntropomorficos::model()->generarReport($inicio, $id, "peso");
        $datosTabla = DatosAntropomorficos::model()->generarArrayDatos($inicio, $id);

        $this->render("/../views/ninios/reports/index", array(
            "report" => $reporteIMC,
            "reportTalla" => $reporteTalla,
            "reportPeso" => $reportePeso,
            "datosTabla" => $datosTabla,
            "ninio" => $ninio,
        ));
    }

    /**
     * Exporta a pdf una historia del infante, esta contiene datos de sus
     *  medidad antropometricas por fechas y datos personales
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param int $id id del infante
     */
    public function actionExportMedidasPdf($id) {
        $ninio = Ninios::model()->findByPk((int) $id);
        $inicio = $ninio->fecha_nacimiento;
        $id = $ninio->id;
        $datosTabla = DatosAntropomorficos::model()->generarArrayDatos($inicio, $id);
        $this->layout = "//layouts/mPdf/historicoDatosAntropometricos";
        $mPDF = Yii::app()->ePdf->mpdf('utf-8', 'A4-L', 8);
        $stylesheet = file_get_contents(Yii::getPathOfAlias('webroot.themes.abound') . '/css/bootstrap.min.css');
        $mPDF->WriteHTML($stylesheet, 1);
        $stylesheet1 = file_get_contents(Yii::getPathOfAlias('webroot.themes.abound') . '/js/bootstrap.min.js');
        $mPDF->WriteHTML($stylesheet1, 1);
        $partial = $this->renderPartial('../ninios/reports/_historico', array(
            'datosTabla' => $datosTabla, 'ninio' => $ninio
                ), true, false);
        $mPDF->writeHTML($partial, 2);
        $mPDF->addPage();
        $partial2 = $this->renderPartial('../ninios/reports/_infoInfante', array(
            'datosTabla' => $datosTabla, 'ninio' => $ninio
                ), true, false);
        $mPDF->writeHTML($partial2, 2);
        $mPDF->Output();
    }

    /**
     * Valida si es posible actualizar el dato antropometrico
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param int $id identificador del dato antropometrico
     * @param String $actionType identifica el action
     * 
     */
    public function actionAjaxValidateUpdateDatoAntro($id, $actionType, $idDatoAntro) {
        if (Yii::app()->request->isAjaxRequest) {
            $data = DatosAntropomorficos::model()->validarActualizacionDatoAntropometrico($id, $actionType, $idDatoAntro);
            echo json_encode($data);
        }
    }

    /**
     * Funcion ajax que devuelve los reportes del pie para una institucion y un mes en particular
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param int $id identificador de la institucion
     * @param String $fechaMes describe la fecha con año y mes
     * @return type
     * @throws CHttpException
     */
    public function actionAjaxGetSeriesPie($id, $fechaMes) {
        if (Yii::app()->request->isAjaxRequest) {
            if (empty($id) || empty($fechaMes)) {
                throw new CHttpException('500', 'Datos inválidos');
            } else {
                $dataTalla = DatosAntropomorficos::model()->generarReportIndicadores("interpretacion_talla", $id, $fechaMes);
                $datospeso = DatosAntropomorficos::model()->generarReportIndicadores("interpretacion_peso", $id, $fechaMes);
                $dataindicesninos = [];
                $data = array('dataTalla' => $dataTalla, 'dataPeso' => $datospeso);
                echo CJSON::encode(array(
                    'body' => $data,
                ));
                return;
            }
        } else
            throw new CHttpException('403', 'Forbidden access.');
    }

    /**
     * Actualiza los datos necesarios de los datos antropometricos entre un particular de fechas
     */
    public function actionUpdatePreferTime() {

        $fechaini = "2015-04-01 00:00:00";
        $fechafin = "2015-04-06 23:59:59";
        $contenedorIds = [];

        $contenedorIds = DatosAntropomorficos::model()->findAll(array("condition" => "fecha between :fechaI and :fechaF", "params" => array(":fechaI" => $fechaini, ":fechaF" => $fechafin)));
        $modelNinio = [];
        foreach ($contenedorIds as $auxData) {
            $modelNinio = Ninios::model()->findByPk($auxData->ninios_id);
            $auxData = $this->loadModel($auxData->id);
            $auxData->fecha = "2015-03-31 23:59:59";
            $auxEdad = $auxData->edad - 1;
            $auxData->edad = (string) $auxEdad;
            $auxData->interpretacion_peso = rangosCurvasOms::getRangoInterpretadoPeso($modelNinio->genero, $auxEdad, (float) $auxData->peso);
            $auxData->interpretacion_talla = rangosCurvasOms::getRangoInterpretadoTalla($modelNinio->genero, $auxEdad, (float) $auxData->talla);
            var_dump($auxData->update());
        }
    }

}
